package com.ia2014.tp.portal2.utils;



import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import com.ia2014.tp.portal2.entities.Articulo;
import com.ia2014.tp.portal2.entities.ArticuloElectrodomestico;
import com.ia2014.tp.portal2.entities.ArticuloInfantil;
import com.ia2014.tp.portal2.entities.ArticuloModa;
import com.ia2014.tp.portal2.entities.ArticuloMueble;
import com.ia2014.tp.portal2.entities.Modulo;
import com.ia2014.tp.portal2.entities.ModuloDeposito;
import com.ia2014.tp.portal2.entities.ModuloDespacho;
import com.ia2014.tp.portal2.entities.ModuloLogistica;
import com.ia2014.tp.portal2.entities.ModuloPortal;
import com.ia2014.tp.portal2.vo.ArticuloVO;
import com.ia2014.tp.portal2.entities.Venta;
import com.ia2014.tp.portal2.enums.ModulosEnum;
import com.ia2014.tp.portal2.vo.VentaVO; 

public class Helper {

	
	private static Logger logger = Logger.getLogger(Helper.class);
	
	private static List<Modulo> modulos; 
	
	@PersistenceContext(unitName = "DAO")
    private static EntityManager em;
	
	public static Articulo getArticuloFromVO(ArticuloVO vo){
		Articulo articulo;
		
		if(vo.getArticuloElectrodomesticoVO() != null){
			articulo = new ArticuloElectrodomestico();
			articulo.setVO(vo);
			
		}
		else if(vo.getArticuloInfantilVO() != null){
			articulo = new ArticuloInfantil();
			articulo.setVO(vo);
				
		}
		else if(vo.getArticuloMuebleVO() != null){
			articulo = new ArticuloMueble();
			articulo.setVO(vo);
				
		}
		else if(vo.getArticuloModaVO() != null){
			articulo = new ArticuloModa();
			articulo.setVO(vo);
				
		}
		else
			return null;
		
		return articulo;
	}
	
	public static Venta getVentaFromVO(VentaVO vo){
		Venta venta;
		
		if(vo != null){
			
			venta = new Venta();
			venta.setVO(vo);
		}
		else
			return null;
		
		return venta;
	}

	public static void actualizarModulos(List<Modulo> listaModulos) {
		
		modulos = listaModulos;
		
	}
	
	
	private static Modulo getModulo(ModulosEnum tipoModulo){
		
		Modulo modulo = null;
		
		try{ 
			
			for (int index = 0; index < modulos.size() ; index ++) {
				
				if (tipoModulo == modulos.get(index).getTipoModulo()) {
					
					modulo = modulos.get(index);
					break;
				}
				
			}

			
			if (modulo == null) {
				logger.warn("No se obtuvo el Modulo Tipo " + tipoModulo.toString());		
			}
			
						
			return modulo;
		
		} catch(Exception e){
		
			logger.error("Error al tratar de obtener el Modulo Tipo " + tipoModulo.toString());
			logger.error(e.toString());
			logger.debug("Stacktrace", e);
		
			return null;
		}
	}
	
	public static ModuloLogistica getModuloLogistica(){
		
		return (ModuloLogistica)getModulo(ModulosEnum.LOGISTICA);
	}
	
	public static ModuloDeposito getModuloDeposito(){
		
		return (ModuloDeposito)getModulo(ModulosEnum.DEPOSITO);
	}
	
	public static ModuloPortal getModuloPortal(){
		
		return (ModuloPortal)getModulo(ModulosEnum.PORTAL);
	}
	
	public static ModuloDespacho getModuloDespacho(){
		
		return (ModuloDespacho)getModulo(ModulosEnum.DESPACHO);
	}

	public static String getURLWebServiceLogLogisticaMonitoreo() {
		
		//return "http://192.168.0.23:8080/Monitoreo/WSMonitoreo";
		//return "http://" + Helper.getModuloLogistica().getIpAddress() + ":8080/Monitoreo/WSMonitoreo";
		return Helper.getModuloLogistica().getUrl(); 
				
	}
	
	public static String getURLWebServiceConfirmacionVentaLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		
		//return "http://192.168.0.23:8080/Monitoreo/WSMonitoreo";
		//return "http://" + Helper.getModuloLogistica().getIpAddress() + ":8080/Monitoreo/WSMonitoreo";
		return Helper.getModuloLogistica().getUrl();
	}
	
	public static String getURLQueueLogLogisticaMonitoreo(){
		
		return "remote://" + Helper.getModuloLogistica().getIpAddress() + ":4447";
	}
	
	public static String getUserQueueLogLogisticaMonitoreo(){
		
		//TODO Agregar codigo para tomar los valores desde la configuracion
		if ((Helper.getModuloLogistica().getUserJMS() == null ) ||
			(Helper.getModuloLogistica().getUserJMS() == "") ){
		
			return "";
		}
		else {
			return Helper.getModuloLogistica().getUserJMS();
		}
	}
	
	public static String getPasswordQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		if ((Helper.getModuloLogistica().getPassJMS() == null ) ||
				(Helper.getModuloLogistica().getPassJMS() == "") ){
			
				return "";
			}
			else {
				return Helper.getModuloLogistica().getPassJMS();
			}
	}
	
	public static String getQueueLogLogisticaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		//return "jms/queue/monitoreo";
		return Helper.getModuloLogistica().getColaJMS();
	}
	
	public static boolean getEnvioAsyncLogLogidaMonitoreo(){
		//TODO Agregar codigo para tomar los valores desde la configuracion
		return !Helper.getModuloLogistica().getSincronico();
		
	}
	
}
